<?php


namespace ImiApp\ApiServer\Api\Controller\task;
// use Imi\Log\Log;
// use Imi\Bean\Annotation\Bean;
// use Imi\Queue\Contract\IMessage;
// use Imi\Queue\Driver\IQueueDriver;
// use Imi\Queue\Service\BaseQueueConsumer;

use Imi\Cron\Annotation\Cron;
use Imi\Cron\Contract\ICronTask;

use Imi\Db\Db;

/**
 * @Cron(id="CronRunBill",  day="1n",hour="0",minute="2", second="1",successLog=true,  type="random_worker")
 */
class CronRunBill implements ICronTask
{
    /**
     * 执行任务
     *
     * @param string $id
     * @param mixed $data
     * @return void
     */
    public function run(string $id, $data): void
    {
        //连接数据库
        try {
            
            $bill = new \ImiApp\ApiServer\Api\Controller\run\Bill;
            $bill->update_all_run(date('Y-m-d',strtotime('yesterday')));
            var_dump('开始执行每日运营中心计算'.date('Y-m-d',strtotime('yesterday')));
            // Db::name('config')->limit(1)->find();
        } catch (\Throwable $th) {
            var_dump('异常定时' . date('Y-m-d H:i:s') . __METHOD__ . $th->getMessage());
        }


        // var_dump('random'.date('Y-m-d H:i:s').__METHOD__.$id,$data);
    }



    //     注解设定
    // 注解 @Cron，类 Imi\Cron\Annotation\Cron

    // @Cron(id="任务唯一ID", type="", year="", month="", day="", hour="", minute="", second="", unique=null, redisPool="", lockWaitTimeout="", maxExecutionTime="", force=false, delayMin=0, delayMax=0, successLog=true)

    // 属性
    // id:

    // 使用@Cron注解时的任务唯一ID。如果是 Task、Process，默认使用 Task 或 Process + 名称。

    // type:

    // 任务类型

    // 可选：

    // random_worker-随机工作进程任务

    // all_worker-所有工作进程执行的任务

    // task-后台任务

    // process-进程

    // cron_process-定时任务进程

    // force:

    // 每次启动服务强制执行，默认为false

    // year:

    // 指定任务执行年份，默认为 *。

    // * - 不限制

    // 2019 - 指定年

    // 2019-2022 - 指定年份区间

    // 2019,2021,2022 - 指定多个年份

    // 2n - 每 2 年，其它以此类推

    // 取值范围：>=1 and <= 2100，不在范围内会抛出异常。
    // 在 imi 3.0 中会考虑移除最大到 2100 年的限制。（不过真的有项目能跑到那个时候吗？）
    // month:

    // 指定任务执行月份，默认为 *。

    // * - 不限制

    // 1 (1 月), -1 (12 月) - 指定月份，支持负数为倒数的月

    // 1-6 (1-6 月), -3--1 (10-12 月) - 指定月份区间，支持负数为倒数的月

    // 1,3,5,-1 (1、3、5、12 月) - 指定多个月份，支持负数为倒数的月

    // 2n - 每 2 个月，其它以此类推

    // 取值范围：>=1 and <= 12，不在范围内会抛出异常。
    // day:

    // 指定任务执行日期，默认为 *。

    // * - 不限制

    // 1 (1 日), -1 (每月最后一天) - 指定日期，支持负数为倒数的日期

    // 1-6 (1-6 日), -3--1 (每月倒数 3 天) - 指定日期区间，支持负数为倒数的日期

    // 1,3,5,-1 (每月 1、3、5、最后一天) - 指定多个日期，支持负数为倒数的日期

    // 2n - 每 2 天，其它以此类推

    // year 1 (一年中的第 1 日), year -1 (每年最后一天) - 指定一年中的日期，支持负数为倒数的日期

    // 1-6 (一年中的第 1-6 日), -3--1 (每年倒数 3 天) - 指定一年中的日期区间，支持负数为倒数的日期

    // year 1-6 (一年中的第 1-6 日), year -3--1 (每年倒数 3 天) - 指定一年中的日期区间，支持负数为倒数的日期

    // 1,3,5,-1 (每年 1、3、5、最后一天) - 指定一年中的多个日期，支持负数为倒数的日期

    // year 1,3,5,-1 (每年 1、3、5、最后一天) - 指定一年中的多个日期，支持负数为倒数的日期

    // 取值范围：>=1 and <= 31，不在范围内会抛出异常。
    // 带 year 的取值范围：>=1 and <= 366，不在范围内会抛出异常。
    // week:

    // 指定周几执行任务，默认为 *。
    // * - 不限制
    // 1 (周一), -1 (周日) - 指定周几（1-7），支持负数为倒数的周
    // 1-6 (周一到周六), -3--1 (周五到周日) - 指定周几，支持负数为倒数的周
    // 1,3,5,-1 (周一、三、五、日) - 指定多个日期，支持负数为倒数的周

    // 取值范围：>=1 and <= 7，不在范围内会抛出异常。
    // hour:

    // 指定任务执行小时，默认为 *。

    // * - 不限制

    // 0 (0 点), -1 (23 点) - 指定小时，支持负数为倒数的小时

    // 1-6 (1-6 店), -3--1 (21-23 点) - 指定小时区间，支持负数为倒数的小时

    // 1,3,5,-1 (1、3、5、23 点) - 指定多个小时，支持负数为倒数的小时

    // 2n - 每 2 小时，其它以此类推

    // 取值范围：>=0 and <= 23，不在范围内会抛出异常。
    // minute:

    // 指定任务执行分钟，默认为 *。

    // * - 不限制

    // 0 (0 分), -1 (59 分) - 指定分钟，支持负数为倒数的分钟

    // 1-6 (1-6 分), -3--1 (57-59 分) - 指定分钟区间，支持负数为倒数的分钟

    // 1,3,5,-1 (1、3、5、59 分) - 指定多个分钟，支持负数为倒数的分钟

    // 2n - 每 2 分钟，其它以此类推

    // 取值范围：>=0 and <= 59，不在范围内会抛出异常。
    // second:

    // 指定任务执行秒，默认为 *。

    // * - 不限制

    // 0 (0 秒), -1 (59 秒) - 指定秒，支持负数为倒数的秒

    // 1-6 (1-6 秒), -3--1 (57-59 秒) - 指定秒区间，支持负数为倒数的秒

    // 1,3,5,-1 (1、3、5、59 秒) - 指定多个秒，支持负数为倒数的秒

    // 2n - 每 2 秒，其它以此类推

    // 取值范围：>=0 and <= 59，不在范围内会抛出异常。
    // unique:

    // 定时任务唯一性设置
    // 当前实例唯一: current
    // 所有实例唯一: all
    // 不唯一: null
}
